' Written by Craig'n'Dave
Module Module1
    ' Depth first traversal using a graph
    Function dft(graph As Dictionary(Of String, List(Of String)), current_vertex As String, visited As List(Of String))
        visited.Add(current_vertex)
        For Each vertex In graph.Item(current_vertex)
            If Not visited.Contains(vertex) Then
                dft(graph, vertex, visited)
            End If
        Next
        Return visited
    End Function

    Sub main()
        ' Main program starts here
        Dim graph = New Dictionary(Of String, List(Of String)) From {
            {"A", New List(Of String) From {"B", "C", "D"}},
            {"B", New List(Of String) From {"A", "E"}},
            {"C", New List(Of String) From {"A", "D"}},
            {"D", New List(Of String) From {"A", "C", "F"}},
            {"E", New List(Of String) From {"B", "G"}},
            {"F", New List(Of String) From {"D"}},
            {"G", New List(Of String) From {"E"}}
            }
        Dim visited As New List(Of String)
        visited = dft(graph, "A", visited)
        Console.WriteLine(String.Join(", ", visited))
    End Sub
End Module
